-
-
Notifications
You must be signed in to change notification settings - Fork 52
Sqm improvements #372
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Sqm improvements #372
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This reverts commit c872394.
Move saturation handling from auto-exposure to SQM calculation: - SQM: detect saturated stars (max aperture pixel >= 250) and exclude from mzero calculation by setting flux to -1 - Auto-exposure: remove saturation detection, just target background level This allows longer exposures for better background SNR while ignoring bright saturated stars that would corrupt the photometric calibration. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
colors.get() only takes intensity, not red=True keyword argument. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SQM state only has value, source, last_update - not value_raw. Store source in metadata instead. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Change target_background from min*1.25 to min+2 for more linear camera response and less saturation risk. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add noise_floor to shared state (solver writes, camera reads) - SNR controller uses adaptive noise floor + 2 as min_background - Falls back to static camera profile if noise floor not yet available This gives more accurate exposure control based on real-time noise measurements instead of static camera profile values. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Show 'Saving...' message immediately before creating zip - Remove +2 margin from noise floor - target exact value for shortest exposure Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Includes: mzero, mzero_std, background, pedestal, extinction, star counts, saturation info, etc. - everything needed for calibration validation. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Captures 3 exposures: base, +1 stop, -1 stop (or base, -1, -2 if at max). Shows progress for each bracket. Re-enables auto-exposure when done. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Faster sweep (~1 min vs ~4 min) while still sampling exposure space. Launch from SQM view → hold square → DEBUG. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Brighter stars have higher SNR so their mzero estimates are more reliable. Weight each star's contribution by its flux. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Without margin, background_corrected ≈ 0 when at noise floor, causing log10(~0) = very negative, making SQM too high. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…tion Two fixes for SQM being ~0.4 mag too high: 1. Use only bias_offset (6.0 ADU) as pedestal instead of full noise_floor (7.46 ADU). Read noise and dark current are random fluctuations, not systematic offsets that should be subtracted. 2. Disable atmospheric extinction correction. When comparing to ground-based SQM meters, both measurements are through the same atmosphere, so no correction is needed. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use 0.1 mag/airmass to match typical consumer SQM meters instead of the scientific V-band value (0.28). This enables comparing measurements at different altitudes while staying consistent with reference meters. At zenith: +0.10 mag At 45°: +0.14 mag At 30°: +0.20 mag Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…ased for science
- Main SQM value uses fixed 0.1 mag extinction (matches consumer SQM meters)
- Also calculate altitude-dependent extinction (0.1 mag/airmass)
- Display altitude-corrected value on SQM view in small font ("alt: XX.XX")
- Enables comparing measurements at different altitudes scientifically
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Main SQM value: raw measurement (no extinction correction) - Altitude-corrected: adds 0.28*(airmass-1) per ASTAP convention - Zenith is reference point (extinction=0), only additional extinction below zenith is added for altitude comparison At different altitudes: - Zenith (90°): extinction = 0 - 45°: extinction = 0.115 - 30°: extinction = 0.28 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Simplify SQMCalculator API by removing unused parameters - Add robust Cedar-to-tetra3 fallback when centroid extraction fails - Fix read noise calculation to use temporal variance (avoids PRNU) - Add calibration indicator (CAL/!CAL) to SQM display - Expand test coverage for SQM functionality Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Fix PID integral crash: Reset integral when error changes sign (prevents -487,500µs crash when going from too many → too few stars) - Start sweep at 400ms instead of 25ms for faster recovery - Add sleep mode logging to diagnose camera blocking issues - Revert default to PID (SNR exposures too long on clear nights) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Tests now reflect the new sweep pattern that starts at 400ms instead of 25ms for faster recovery. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
TakKanekoGit
pushed a commit
to TakKanekoGit/PiFinder
that referenced
this pull request
Jan 28, 2026
* Adding first version of sqm measurement * Added UI screen, some refactoring for jupyter debugging * Fix crash on no solution * No shared_state crash * Protect against various crash situations * Swapping centroid y/x * Added bortle classes, radius=3 * Now try radius=2 * Raw output for camera in shared state * Introducing bias image * feeding linear image through pipeline * Delete and ignore comets file, sqm fixes * Fix bias image bug * Missing bias image arguments * Another raw_image mention removed * Add debugging output * Merged main with the location changes * Final version of sqm ui - still has the bias frames, will be removed next commit - added bortle descriptions in the ui * Add unit test * Removed bias, added performance code * speed up per-star calculations * Less info logging, translations, fix nox error * fix messages * Updated other languages with translation * Perform SQM every 5 secs, prettify the SQM ui * Fix linting error * Some raw and pedestal changes * Add default dark frames * Better noise floor * fix exposure * leave exposure * Noise floor fixes * processed vs raw * marking menu for pro sqm * add sqm calibration * Immediately reload measurements * improve sweeps and camera type, maybe camera type should be reverted * Raw pipeline * Cleanup * Cleanup after partial PR review * Refactoring camera handling and sqm calibration * Do sqm calibration captures in manual mode * small AE and sqm fixes * Solve stuck * show background during sqm * Fix name error * another fix * resize * Stretch image * Fix SQM sweep capture for production readiness - PNG Processing: Changed sweep to save 8-bit processed PNGs using capture() method - GPS Time Integration: Sweep now uses GPS datetime from shared_state - Altitude Calculation: Added automatic altitude calculation from RA/Dec - Metadata Saving: Implemented comprehensive metadata saving with save_sweep_metadata.py - Progress Bar Fix: Updates progress for every image (not every 10th) - Background Clamping: Modified SQM calculator to clamp negative backgrounds to 1 ADU - Type Hints: Added proper Optional[] type hints for mypy compliance * Fix cedar-detect shared memory crashes and variable shadowing Cedar-detect shared memory fix: - Fixed intermittent FileNotFoundError when cedar-detect has shared memory issues - Client now gracefully handles missing/stale shared memory - Automatically falls back to non-shmem mode instead of crashing - Updated tetra3 submodule with robust error handling Variable shadowing fix: - Fixed linter error where 'time' variable shadowed 'time' module import - Renamed to 'obs_time' for clarity in altitude calculation * Add real-time progress UI for exposure sweep * fix crash on sweep * time based progress of sweep * Fix sweep * Use GPS time * Fix json writing * fix altitude calc * Improve exposure sweep * Better counting and solver crah * more solver indenting * Improve sweep UI * Handle daytime calibration * Add correction ui and help * Add sqm debugging sweeps * Adding SNR AE * Add rotating constellation/SQM display to title bar Adds a rotating info display that alternates between constellation name and SQM value every 3 seconds with a smooth cross-fade animation. * Add exposure time display to SQM view Shows current camera exposure time (e.g., "400ms" or "0.40s") in the top right of the SQM view for diagnostic purposes. Cherry-picked from test-upstream branch. * Simplify Bortle class display on SQM view - Remove redundant title text display - Add guard for missing details - Use base font for consistency * Remove dual pipeline references from SQM code - Remove unused value_raw from SQMState - Rename update_sqm_single_pipeline to update_sqm - Rename sqm_raw to sqm_uncorrected (more accurate name) - Remove raw SQM display from UI - Clean up outdated comments * Refactor rotating display into compact helper class Extract RotatingInfoDisplay class to encapsulate state and animation logic. Reduces code by ~100 lines while preserving cross-fade animation behavior. * Derive SNR controller thresholds from camera profile - Add from_camera_profile() factory method to ExposureSNRController - Calculate min/target/max background from bit_depth and bias_offset - Target background just above min (no benefit to higher values) - Remove arbitrary 400ms min_exposure floor (now 10ms) - Remove 5-second rate limiting (averaging handled in SQM code) * Update tetra3 submodule to match main * Fix KeyError on T_solve when solver fails Check if T_solve exists in solved dict before accessing it. Previously checked wrong dict (solution vs solved) or didn't check at all. * Fix update_sqm parameter name mismatch after merge * Fix KeyError when deleting optional solution fields * Fix camera type detection for SNR controller * Remove duplicate solver code block from bad merge * Add saturation detection to SNR controller * Exclude saturated stars from SQM instead of reducing exposure Move saturation handling from auto-exposure to SQM calculation: - SQM: detect saturated stars (max aperture pixel >= 250) and exclude from mzero calculation by setting flux to -1 - Auto-exposure: remove saturation detection, just target background level This allows longer exposures for better background SNR while ignoring bright saturated stars that would corrupt the photometric calibration. * Fix TypeError in SQM correction UI colors.get() only takes intensity, not red=True keyword argument. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com> * Fix SQM correction: value_raw attribute does not exist SQM state only has value, source, last_update - not value_raw. Store source in metadata instead. * Target minimum background for shorter exposures Change target_background from min*1.25 to min+2 for more linear camera response and less saturation risk. * Use adaptive noise floor for SNR auto-exposure - Add noise_floor to shared state (solver writes, camera reads) - SNR controller uses adaptive noise floor + 2 as min_background - Falls back to static camera profile if noise floor not yet available * UX: Show 'Saving...' during correction save, target exact noise floor - Show 'Saving...' message immediately before creating zip - Remove +2 margin from noise floor - target exact value for shortest exposure * Add noise_floor and imu_delta to correction metadata * Add full SQM calculation details to shared state and correction metadata Includes: mzero, mzero_std, background, pedestal, extinction, star counts, saturation info, etc. - everything needed for calibration validation. * Show star count in SQM view * Move star count to top line in SQM view * Add bracketed exposures to correction package Captures 3 exposures: base, +1 stop, -1 stop (or base, -1, -2 if at max). Shows progress for each bracket. Re-enables auto-exposure when done. * Reduce exposure sweep from 100 to 20 images Faster sweep (~1 min vs ~4 min) while still sampling exposure space. Launch from SQM view → hold square → DEBUG. * Use flux-weighted mean for mzero calculation Brighter stars have higher SNR so their mzero estimates are more reliable. Weight each star's contribution by its flux. * Restore +2 margin above noise floor Without margin, background_corrected ≈ 0 when at noise floor, causing log10(~0) = very negative, making SQM too high. * Fix SQM calculation: use bias_offset only as pedestal, disable extinction Two fixes for SQM being ~0.4 mag too high: 1. Use only bias_offset (6.0 ADU) as pedestal instead of full noise_floor (7.46 ADU). Read noise and dark current are random fluctuations, not systematic offsets that should be subtracted. 2. Disable atmospheric extinction correction. When comparing to ground-based SQM meters, both measurements are through the same atmosphere, so no correction is needed. * Re-enable extinction correction with 0.1 mag/airmass coefficient * Add dual extinction correction: fixed 0.1 for meter match, altitude-based for science - Main SQM value uses fixed 0.1 mag extinction (matches consumer SQM meters) * Use ASTAP extinction convention: 0.28*(airmass-1), no fixed baseline * better default for camera * small corrections to sqm calculation and athmospheric correcitons * Simplify SQM API, fix read noise calculation, add Cedar fallback * Set SNR as default for testing * Fix PID auto-exposure crash and improve sweep recovery - Fix PID integral crash: Reset integral when error changes sign (prevents -487,500µs crash when going from too many → too few stars) - Start sweep at 400ms instead of 25ms for faster recovery - Add sleep mode logging to diagnose camera blocking issues - Revert default to PID (SNR exposures too long on clear nights) * Update tests for sweep starting at 400ms Tests now reflect the new sweep pattern that starts at 400ms instead of 25ms for faster recovery.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Auto-Exposure
SQM Calculation
0.28 × (airmass - 1)UI
Tests